package org.nuonuo.sdk.model.req;

import org.nuonuo.sdk.model.callback.content.InvoiceRedItem;
import org.nuonuo.sdk.valid.Validator;

import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * @Version 1.0
 * @Author az
 * @Date 2024-04-18 18:01:12
 * @ClassName InvoiceRedReq
 * @Description
 */
public class InvoiceRedReq extends Validator {
    /**
     * <pre>
     * 对应蓝票发票种类:
     *  bs:电子发票(增值税专用发票)
     *  pc:电子发票(普通发票)
     *  es:全电纸质发票(增值税专用发票)
     *  ec:全电纸质发票(普通发票)
     *  p:普通发票（电票）
     *  c:普通发票（纸票）
     *  s:专用发票
     *  b:增值税电子专用发票
     * </pre>
     */
    @NotNull(message = "对应蓝票发票种类必填")
    private String blueInvoiceLine;
    /**
     * <pre>
     * 申请方（录入方）身份：
     * 0 销方
     * 1 购方
     * </pre>
     */
    @NotNull(message = "申请方（录入方）身份必填")
    private String applySource;
    /**
     * 销方税号
     */
    @NotNull(message = "销方税号必填")
    private String sellerTaxNo;

    /**
     * 购方名称
     */
    @NotNull(message = "购方名称必填")
    private String buyerName;
    /**
     * <pre>
     * 冲红原因：
     *  1 销货退回
     *  2 开票有误
     *  3 服务中止
     *  4 销售折让
     * </pre>
     */
    @NotNull(message = "冲红原因必填")
    private String redReason;
    /**
     * 销方名称，申请说明为销方申请时可为空
     */
//    @NotNull(message = "销方名称必填")
    private String sellerName;
    /**
     * 红字确认单申请号，需要保持唯一，不传的话系统自动生成一个
     */
    private String billId;
    /**
     * 对应蓝字发票号码（蓝票是增值税发票时必传，长度为8位数字，若传20位数字则视为是蓝字数电票号码）
     */
    private String blueInvoiceNumber;
    /**
     * 对应蓝字发票代码（蓝票是增值税发票时必传）
     */
    private String blueInvoiceCode;
    /**
     * 对应蓝字数电票号码（数电普票、数电专票、数纸普票、数纸专票都需要传，蓝票是增值税发票时不传）
     */
    private String blueElecInvoiceNumber;
    /**
     * 填开时间（时间戳格式），默认为当前时间
     */
    private String billTime;
    /**
     * 部门门店id（诺诺网系统中的id）
     */
    private String departmentId;
    /**
     * 开票员id（诺诺网系统中的id）
     */
    private String clerkId;
    /**
     * 购方税号
     */
    private String buyerTaxNo;

    /**
     * <pre>
     * 蓝字发票增值税用途（预留字段可为空）:
     *  1 勾选抵扣
     *  2 出口退税
     *  3 代办出口退税
     *  4 不抵扣
     * </pre>
     */
    private String vatUsage;
    /**
     * 蓝字发票消费税用途（预留字段可为空）
     */
    private String saleTaxUsage;
    /**
     * <pre>
     * 发票入账状态（预留字段可为空）：
     * 0 未入账
     * 1 已入账
     * </pre>
     */
    private String accountStatus;
    /**
     * 分机号
     */
    private String extensionNumber;
    /**
     * <pre>
     * 是否自动开票：
     *  0 否（不传默认0）
     *  1 是
     *  传1时，所申请的确认单变为购销双方已确认或无需确认状态时，而自动开具红票。目前该字段不生效，电票都自动开，纸票都不自动
     * </pre>
     */
    private String autoInvoice;
    /**
     * 若有值，则在无需确认或购销双方已确认后去自动开红票，发票的开票单号用该值
     */
    private String orderNo;
    /**
     * 交付手机，红票优先取该值，不传默认取原蓝票
     */
    private String phone;
    /**
     * 交付邮箱，红票优先取该值，不传默认取原蓝票
     */
    private String email;
    /**
     * 确认单回传地址，回调内容可联系服务人员；自动开票时，会透传到开票接口
     */
    private String callbackUrl;
    /**
     * 红票信息明细
     */
    private List<InvoiceRedItem> detail;

    public String getBlueInvoiceLine() {
        return blueInvoiceLine;
    }

    public void setBlueInvoiceLine(String blueInvoiceLine) {
        this.blueInvoiceLine = blueInvoiceLine;
    }

    public String getApplySource() {
        return applySource;
    }

    public void setApplySource(String applySource) {
        this.applySource = applySource;
    }

    public String getSellerTaxNo() {
        return sellerTaxNo;
    }

    public void setSellerTaxNo(String sellerTaxNo) {
        this.sellerTaxNo = sellerTaxNo;
    }

    public String getBuyerName() {
        return buyerName;
    }

    public void setBuyerName(String buyerName) {
        this.buyerName = buyerName;
    }

    public String getRedReason() {
        return redReason;
    }

    public void setRedReason(String redReason) {
        this.redReason = redReason;
    }

    public String getSellerName() {
        return sellerName;
    }

    public void setSellerName(String sellerName) {
        this.sellerName = sellerName;
    }

    public String getBillId() {
        return billId;
    }

    public void setBillId(String billId) {
        this.billId = billId;
    }

    public String getBlueInvoiceNumber() {
        return blueInvoiceNumber;
    }

    public void setBlueInvoiceNumber(String blueInvoiceNumber) {
        this.blueInvoiceNumber = blueInvoiceNumber;
    }

    public String getBlueInvoiceCode() {
        return blueInvoiceCode;
    }

    public void setBlueInvoiceCode(String blueInvoiceCode) {
        this.blueInvoiceCode = blueInvoiceCode;
    }

    public String getBlueElecInvoiceNumber() {
        return blueElecInvoiceNumber;
    }

    public void setBlueElecInvoiceNumber(String blueElecInvoiceNumber) {
        this.blueElecInvoiceNumber = blueElecInvoiceNumber;
    }

    public String getBillTime() {
        return billTime;
    }

    public void setBillTime(String billTime) {
        this.billTime = billTime;
    }

    public String getDepartmentId() {
        return departmentId;
    }

    public void setDepartmentId(String departmentId) {
        this.departmentId = departmentId;
    }

    public String getClerkId() {
        return clerkId;
    }

    public void setClerkId(String clerkId) {
        this.clerkId = clerkId;
    }

    public String getBuyerTaxNo() {
        return buyerTaxNo;
    }

    public void setBuyerTaxNo(String buyerTaxNo) {
        this.buyerTaxNo = buyerTaxNo;
    }

    public String getVatUsage() {
        return vatUsage;
    }

    public void setVatUsage(String vatUsage) {
        this.vatUsage = vatUsage;
    }

    public String getSaleTaxUsage() {
        return saleTaxUsage;
    }

    public void setSaleTaxUsage(String saleTaxUsage) {
        this.saleTaxUsage = saleTaxUsage;
    }

    public String getAccountStatus() {
        return accountStatus;
    }

    public void setAccountStatus(String accountStatus) {
        this.accountStatus = accountStatus;
    }

    public String getExtensionNumber() {
        return extensionNumber;
    }

    public void setExtensionNumber(String extensionNumber) {
        this.extensionNumber = extensionNumber;
    }

    public String getAutoInvoice() {
        return autoInvoice;
    }

    public void setAutoInvoice(String autoInvoice) {
        this.autoInvoice = autoInvoice;
    }

    public String getOrderNo() {
        return orderNo;
    }

    public void setOrderNo(String orderNo) {
        this.orderNo = orderNo;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getCallbackUrl() {
        return callbackUrl;
    }

    public void setCallbackUrl(String callbackUrl) {
        this.callbackUrl = callbackUrl;
    }

    public List<InvoiceRedItem> getDetail() {
        return detail;
    }

    public void setDetail(List<InvoiceRedItem> detail) {
        this.detail = detail;
    }
}
